package com.mdd.front.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.order.Order;
import com.mdd.common.entity.user.User;
import com.mdd.front.validate.NewUserUpdateValidate;
import com.mdd.front.validate.PageParam;
import com.mdd.front.validate.UserPointsUpdateParam;
import com.mdd.front.vo.user.UserCenterVo;
import com.mdd.front.vo.user.UserInfoVo;
import com.mdd.front.vo.user.UserWalletFlowVo;
import com.mdd.front.vo.user.UserWalletVo;
import org.springframework.validation.annotation.Validated;

import java.util.Map;

/**
 * 用户服务接口类
 */
public interface IUserService {

    /**
     * 个人中心
     *
     * @author fzr
     * @param userId 用户
     * @param terminal 终端代码
     * @return UserCenterVo
     */
    UserCenterVo center(Integer userId, String terminal);

    /**
     * 我的钱包
     *
     * @author panweiliang
     * @param userId 用户
     * @return UserWalletVo
     */
    UserWalletVo wallet(Integer userId);

    /**
     * 我的账户变动日志
     *
     * @author panweiliang
     * @param userId 用户
     * @return PageResult<UserWalletFlowVo>
     */
    PageResult<UserWalletFlowVo> getUserWalletFlow(PageParam pageParam, Integer action, Integer userId);

    /**
     * 个人信息
     *
     * @author fzr
     * @param userId 用户ID
     * @param terminal
     * @return UserInfoVo
     */
    UserInfoVo info(Integer userId, String terminal);

    /**
     * 编辑信息
     *
     * @author fzr
     * @param params 参数
     * @param userId 用户ID
     */
    void edit(Map<String, String> params, Integer userId);

    /**
     * 修改密码
     *
     * @author fzr
     * @param password 新密码
     * @param oldPassword 旧密码
     * @param userId 用户ID
     */
    void changePwd(String password, String oldPassword, Integer userId);

    /**
     * 绑定手机
     *
     * @author fzr
     * @param params 参数
     * @param userId 用户ID
     */
    void bindMobile(Map<String, String> params, Integer userId);

    /**
     * 微信手机
     *
     * @author fzr
     * @param code 获取手机号的Code
     */
    void mnpMobile(String code);

    /**
     * 根据id获取用户数据
     *
     * @author panweiliang
     * @param id 主键ID
     * @return User
     */
    User getById(Integer id);

    int updateById(User user);


    Map<String, Object> bindWx(Map<String, String> params, Integer userId);

    /**
     * 用户积分修改
     *
     * @author panweiliang
     * @param userPointsUpdateParam 参数
     */
    void updateUserPoints(UserPointsUpdateParam userPointsUpdateParam);

    /**
     * 更新新用户信息
     *
     * @param newUserUpdateValidate 参数
     * @param userId 用户id
     */
    void updateNewUserInfo(NewUserUpdateValidate newUserUpdateValidate, Integer userId);
}
